package top.lshaci.framework.mybatis.utils;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import top.lshaci.framework.common.model.PageQuery;

import java.util.Objects;

/**
 * PageUtil
 *
 * @author lshaci
 * @since 1.0.8
 */
public class PageUtils {

    /**
     * 根据分页查询条件生成分页对象
     *
     * @param pageQuery 分页查询条件
     * @return 分页对象
     */
    public static <T> Page<T> of(PageQuery pageQuery) {
        return of(pageQuery.getPgCt(), pageQuery.getPgSz());
    }

    /**
     * 根据分页查询条件生成分页对象
     *
     * @param pageQuery                分页查询条件
     * @param searchCountOnlyFirstPage true:只有第一页查询总条数; false所有页都查询总条数
     * @return 分页对象
     */
    public static <T> Page<T> of(PageQuery pageQuery, boolean searchCountOnlyFirstPage) {
        Integer pgCt = pageQuery.getPgCt();
        Integer pgSz = pageQuery.getPgSz();
        if (searchCountOnlyFirstPage) {
            return of(pgCt, pgSz, Objects.equals(pgCt, 1));
        }
        return of(pgCt, pgSz);
    }

    /**
     * 根据当前页、条数生成分页对象(默认查询总条数)
     *
     * @param pgCt 当前页
     * @param pgSz 条数
     * @return 分页对象
     */
    public static <T> Page<T> of(long pgCt, long pgSz) {
        return of(pgCt, pgSz, true);
    }

    /**
     * 根据当前页、条数、是否查询总数生成分页对象
     *
     * @param pgCt        当前页
     * @param pgSz        条数
     * @param searchCount 是否查询总数
     * @return 分页对象
     */
    public static <T> Page<T> of(long pgCt, long pgSz, boolean searchCount) {
        return new Page<>(pgCt, pgSz, searchCount);
    }

}
